package nl.hu.vakantievibes.ui;

import java.util.ArrayList;
import java.util.Date;

import nl.hu.vakantievibes.client.ServerCall;
import nl.hu.vakantievibes.client.Systeem;
import nl.hu.vakantievibes.domain.Boeking;
import nl.hu.vakantievibes.domain.Reis;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.VerticalPanel;

public class CarpoolOpties {
	VerticalPanel vp;
	HorizontalPanel hp, hp2;
	Label naamLabel, persoon, bPl, naamLabel4, bFPl, optie;
	Label beschPl, beschFpl, datum, carpoolOpties;
	Label details;
	Reis reis;
	String type;

	public CarpoolOpties() {

	}

	public Panel createPage(final Reis r, String type){
		this.type = type;
		reis = r;
		vp = new VerticalPanel();
		hp2 = new HorizontalPanel();
		persoon = new Label("Persoon:");
		persoon.addStyleName("labelstyle2a");
		bPl = new Label("Beschikbare plaatsen:");
		bPl.addStyleName("labelstyle2a");
		bFPl = new Label("Beschikbare fiets plaatsen:");
		bFPl.addStyleName("labelstyle2a");
		optie = new Label("Optie:");
		optie.addStyleName("labelstyle2a");

		hp2.add(persoon);
		hp2.add(bPl);
		hp2.add(bFPl);
		hp2.add(optie);
		vp.add(hp2);

		getCarpool();
		return vp;
	}

	public void getCarpool(){	
		AsyncCallback<ArrayList<Boeking>> callback = new AsyncCallback<ArrayList<Boeking>>() {
			@Override
			public void onFailure(Throwable caught) {
				NotificationManager.get().createNotification("Er is een server fout opgetreden. De reizen konden niet worden opgehaald van de server.");
				GWT.log(caught.getMessage());
				caught.printStackTrace();
			}
			@Override
			public void onSuccess(ArrayList<Boeking> result) {
				if(result.size() == 0){
					NotificationManager.get().createNotification("Er zijn nog geen carpools beschikbaar.");
				}else{
					for(final Boeking b : result){
						if(!Systeem.get().getGebruiker().equals(b.getDeGebruiker())){
							if(b.getDeReis().equals(reis)){
								if(b.getAuto() && b.getZitPlaatsen() > 0){
									hp = new HorizontalPanel();

									naamLabel = new Label(b.getDeGebruiker().getNaam()); 
									naamLabel.addStyleName("labelstyle1");

									beschPl = new Label(""+b.getZitPlaatsen()); 
									beschPl.addStyleName("labelstyle1");

									beschFpl = new Label(""+b.getFietsPlaatsen());
									beschFpl.addStyleName("labelstyle1");

									carpoolOpties = new Label("Uitnodiging sturen");
									carpoolOpties.addStyleName("details-link");	
									carpoolOpties.addClickHandler(new ClickHandler() {
										@Override
										public void onClick(ClickEvent event) {
											Systeem.get().showPage(new BerichtVerzenden(b.getDeGebruiker(), b.getDeReis()).createPage());
										}
									});

									hp.add(naamLabel);
									hp.add(beschPl);
									hp.add(beschFpl);
									hp.add(carpoolOpties);
									vp.add(hp);
								}
							}
						}
					}
				}
			}
		};
		new ServerCall().getAlleBoekingen(callback);
	}

	public String changeDate(Date dt)
	{
		DateTimeFormat dtf = DateTimeFormat.getFormat("dd-MM-yyyy");
		return dtf.format(dt);
	}
}
